imports.c revision e1e446bf775a7f2ea93b4e54c7748ef603500977
16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* $Id: imports.c,v 1.29 2003/01/14 03:05:38 brianp Exp $ */ 26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Mesa 3-D graphics library 56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Version: 5.1 66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Permission is hereby granted, free of charge, to any person obtaining a 106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * copy of this software and associated documentation files (the "Software"), 116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * to deal in the Software without restriction, including without limitation 126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * the rights to use, copy, modify, merge, publish, distribute, sublicense, 136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * and/or sell copies of the Software, and to permit persons to whom the 146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Software is furnished to do so, subject to the following conditions: 156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * The above copyright notice and this permission notice shall be included 176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * in all copies or substantial portions of the Software. 186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Imports are services which the device driver or window system or 306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * operating system provides to the core renderer. The core renderer (Mesa) 316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * will call these functions in order to do memory allocation, simple I/O, 326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * etc. 336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Some drivers will want to override/replace this file with something 356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * specialized, but that'll be rare. 366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Eventually, I want to move roll the glheader.h file into this. 386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * The OpenGL SI's __GLimports structure allows per-context specification of 406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * replacements for the standard C lib functions. In practice that's probably 416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * never needed; compile-time replacements are far more likely. 426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * 436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * The _mesa_foo() functions defined here don't in general take a context 446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * parameter. I guess we can change that someday, if need be. 456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * So for now, the __GLimports stuff really isn't used. 466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "glheader.h" 506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "mtypes.h" 516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "context.h" 526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "imports.h" 536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define MAXSTRING 4000 /* for vsnprintf() */ 566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef WIN32 586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define vsnprintf _vsnprintf 596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined(__IBMC__) || defined(__IBMCPP__) || defined(VMS) 606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennextern int vsnprintf(char *str, size_t count, const char *fmt, va_list arg); 616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**********************************************************************/ 656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* Wrappers for standard C library functions */ 666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**********************************************************************/ 676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* 696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * Functions still needed: 706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * scanf 716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * qsort 726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * bsearch 736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * rand and RAND_MAX 746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid * 776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_malloc(size_t bytes) 786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86malloc(bytes); 816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return malloc(bytes); 836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid * 886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_calloc(size_t bytes) 896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86calloc(1, bytes); 926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return calloc(1, bytes); 946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid 996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_free(void *ptr) 1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn xf86free(ptr); 1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn free(ptr); 1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid * 1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_align_malloc(size_t bytes, unsigned long alignment) 1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned long ptr, buf; 1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT( alignment > 0 ); 1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* Allocate extra memory to accomodate rounding up the address for 1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * alignment and to record the real malloc address. 1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ptr = (unsigned long) _mesa_malloc(bytes + alignment + sizeof(void *)); 1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if (!ptr) 1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1); 1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *(unsigned long *)(buf - sizeof(void *)) = ptr; 1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef DEBUG 1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* mark the non-aligned area */ 1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while ( ptr < buf - sizeof(void *) ) { 1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *(unsigned long *)ptr = 0xcdcdcdcd; 1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ptr += sizeof(unsigned long); 1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (void *) buf; 1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid * 1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_align_calloc(size_t bytes, unsigned long alignment) 1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn unsigned long ptr, buf; 1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ASSERT( alignment > 0 ); 1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ptr = (unsigned long) _mesa_calloc(bytes + alignment + sizeof(void *)); 1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if (!ptr) 1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return NULL; 1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1); 1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *(unsigned long *)(buf - sizeof(void *)) = ptr; 1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef DEBUG 1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* mark the non-aligned area */ 1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while ( ptr < buf - sizeof(void *) ) { 1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *(unsigned long *)ptr = 0xcdcdcdcd; 1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn ptr += sizeof(unsigned long); 1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn } 1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (void *)buf; 1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid 1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_align_free(void *ptr) 1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if 0 1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _mesa_free( (void *)(*(unsigned long *)((unsigned long)ptr - sizeof(void *))) ); 1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn /* The actuall address to free is stuffed in the word immediately 1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn * before the address the client sees. 1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn */ 1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void **cubbyHole = (void **) ((char *) ptr - sizeof(void *)); 1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn void *realAddr = *cubbyHole; 1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _mesa_free(realAddr); 1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid * 1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_memcpy(void *dest, const void *src, size_t n) 1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86memcpy(dest, src, n); 1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined(SUNOS4) 1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return memcpy((char *) dest, (char *) src, (int) n); 1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return memcpy(dest, src, n); 1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid 1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_memset( void *dst, int val, size_t n ) 1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn xf86memset( dst, val, n ); 1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined(SUNOS4) 1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memset( (char *) dst, (int) val, (int) n ); 2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memset(dst, val, n); 2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid 2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_memset16( unsigned short *dst, unsigned short val, size_t n ) 2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn while (n-- > 0) 2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn *dst++ = val; 2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid 2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_bzero( void *dst, size_t n ) 2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn xf86memset( dst, 0, n ); 2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#elif defined(__FreeBSD__) 2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn bzero( dst, n ); 2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn memset( dst, 0, n ); 2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renndouble 2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_sin(double a) 2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86sin(a); 2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return sin(a); 2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renndouble 2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_cos(double a) 2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86cos(a); 2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return cos(a); 2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renndouble 2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_sqrt(double x) 2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86sqrt(x); 2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return sqrt(x); 2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renndouble 2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_pow(double x, double y) 2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86pow(x, y); 2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return pow(x, y); 2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennchar * 2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_getenv( const char *var ) 2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86getenv(var); 2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return getenv(var); 2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennchar * 2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strstr( const char *haystack, const char *needle ) 2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strstr(haystack, needle); 2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strstr(haystack, needle); 2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennchar * 2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strncat( char *dest, const char *src, size_t n ) 2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strncat(dest, src, n); 2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strncat(dest, src, n); 3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennchar * 3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strcpy( char *dest, const char *src ) 3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strcpy(dest, src); 3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strcpy(dest, src); 3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennchar * 3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strncpy( char *dest, const char *src, size_t n ) 3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strncpy(dest, src, n); 3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strncpy(dest, src, n); 3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennsize_t 3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strlen( const char *s ) 3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strlen(s); 3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strlen(s); 3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint 3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strcmp( const char *s1, const char *s2 ) 3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strcmp(s1, s2); 3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strcmp(s1, s2); 3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint 3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strncmp( const char *s1, const char *s2, size_t n ) 3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strncmp(s1, s2, n); 3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return strncmp(s1, s2, n); 3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennchar * 3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strdup( const char *s ) 3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int l = _mesa_strlen(s); 3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn char *s2 = _mesa_malloc(l + 1); 3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn if (s2) 3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn _mesa_strcpy(s2, s); 3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return s2; 3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint 3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_atoi(const char *s) 3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86atoi(s); 3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return atoi(s); 3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennfloat 3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_strtof( const char *s, char **end ) 3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined(XFree86LOADER) && defined(IN_MODULE) 3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return xf86strtof(s, end); 3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else 3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn return (float) strtod(s, end); 3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif 3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} 3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn 3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint 3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn_mesa_sprintf( char *str, const char *fmt, ... ) 3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{ 3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn int r; 3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn va_list args; 397 va_start( args, fmt ); 398 va_end( args ); 399#if defined(XFree86LOADER) && defined(IN_MODULE) 400 r = xf86vsprintf( str, fmt, args ); 401#else 402 r = vsprintf( str, fmt, args ); 403#endif 404 return r; 405} 406 407 408void 409_mesa_printf( const char *fmtString, ... ) 410{ 411 char s[MAXSTRING]; 412 va_list args; 413 va_start( args, fmtString ); 414 vsnprintf(s, MAXSTRING, fmtString, args); 415 va_end( args ); 416#if defined(XFree86LOADER) && defined(IN_MODULE) 417 xf86printf("%s", s); 418#else 419 printf("%s", s); 420#endif 421} 422 423 424void 425_mesa_warning( GLcontext *ctx, const char *fmtString, ... ) 426{ 427 GLboolean debug; 428 char str[MAXSTRING]; 429 va_list args; 430 (void) ctx; 431 va_start( args, fmtString ); 432 (void) vsnprintf( str, MAXSTRING, fmtString, args ); 433 va_end( args ); 434#ifdef DEBUG 435 debug = GL_TRUE; /* always print warning */ 436#else 437 debug = _mesa_getenv("MESA_DEBUG") ? GL_TRUE : GL_FALSE; 438#endif 439 if (debug) { 440#if defined(XFree86LOADER) && defined(IN_MODULE) 441 xf86fprintf(stderr, "Mesa warning: %s\n", str); 442#else 443 fprintf(stderr, "Mesa warning: %s\n", str); 444#endif 445 } 446} 447 448 449/* 450 * This function is called when the Mesa user has stumbled into a code 451 * path which may not be implemented fully or correctly. 452 */ 453void 454_mesa_problem( const GLcontext *ctx, const char *fmtString, ... ) 455{ 456 va_list args; 457 char str[MAXSTRING]; 458 (void) ctx; 459 460 va_start( args, fmtString ); 461 vsnprintf( str, MAXSTRING, fmtString, args ); 462 va_end( args ); 463 464#if defined(XFree86LOADER) && defined(IN_MODULE) 465 xf86fprintf(stderr, "Mesa implementation error: %s\n", str); 466 xf86fprintf(stderr, "Please report to the DRI project at dri.sourceforge.net\n"); 467#else 468 fprintf(stderr, "Mesa implementation error: %s\n", str); 469 fprintf(stderr, "Please report to the Mesa bug database at www.mesa3d.org\n" ); 470#endif 471} 472 473 474/* 475 * If in debug mode, print error message to stdout. 476 * Also, record the error code by calling _mesa_record_error(). 477 * Input: ctx - the GL context 478 * error - the error value 479 * fmtString - printf-style format string, followed by optional args 480 */ 481void 482_mesa_error( GLcontext *ctx, GLenum error, const char *fmtString, ... ) 483{ 484 const char *debugEnv; 485 GLboolean debug; 486 487 debugEnv = _mesa_getenv("MESA_DEBUG"); 488 489#ifdef DEBUG 490 if (debugEnv && _mesa_strstr(debugEnv, "silent")) 491 debug = GL_FALSE; 492 else 493 debug = GL_TRUE; 494#else 495 if (debugEnv) 496 debug = GL_TRUE; 497 else 498 debug = GL_FALSE; 499#endif 500 501 if (debug) { 502 va_list args; 503 char where[MAXSTRING]; 504 const char *errstr; 505 506 va_start( args, fmtString ); 507 vsnprintf( where, MAXSTRING, fmtString, args ); 508 va_end( args ); 509 510 switch (error) { 511 case GL_NO_ERROR: 512 errstr = "GL_NO_ERROR"; 513 break; 514 case GL_INVALID_VALUE: 515 errstr = "GL_INVALID_VALUE"; 516 break; 517 case GL_INVALID_ENUM: 518 errstr = "GL_INVALID_ENUM"; 519 break; 520 case GL_INVALID_OPERATION: 521 errstr = "GL_INVALID_OPERATION"; 522 break; 523 case GL_STACK_OVERFLOW: 524 errstr = "GL_STACK_OVERFLOW"; 525 break; 526 case GL_STACK_UNDERFLOW: 527 errstr = "GL_STACK_UNDERFLOW"; 528 break; 529 case GL_OUT_OF_MEMORY: 530 errstr = "GL_OUT_OF_MEMORY"; 531 break; 532 case GL_TABLE_TOO_LARGE: 533 errstr = "GL_TABLE_TOO_LARGE"; 534 break; 535 default: 536 errstr = "unknown"; 537 break; 538 } 539 _mesa_debug(ctx, "Mesa user error: %s in %s\n", errstr, where); 540 } 541 542 _mesa_record_error(ctx, error); 543} 544 545 546/* 547 * Call this to report debug information. Uses stderr. 548 */ 549void 550_mesa_debug( const GLcontext *ctx, const char *fmtString, ... ) 551{ 552 char s[MAXSTRING]; 553 va_list args; 554 va_start(args, fmtString); 555 vsnprintf(s, MAXSTRING, fmtString, args); 556 va_end(args); 557#if defined(XFree86LOADER) && defined(IN_MODULE) 558 xf86fprintf(stderr, "Mesa: %s", s); 559#else 560 fprintf(stderr, "Mesa: %s", s); 561#endif 562} 563 564 565 566/**********************************************************************/ 567/* Default Imports Wrapper */ 568/**********************************************************************/ 569 570static void * 571default_malloc(__GLcontext *gc, size_t size) 572{ 573 (void) gc; 574 return _mesa_malloc(size); 575} 576 577static void * 578default_calloc(__GLcontext *gc, size_t numElem, size_t elemSize) 579{ 580 (void) gc; 581 return _mesa_calloc(numElem * elemSize); 582} 583 584static void * 585default_realloc(__GLcontext *gc, void *oldAddr, size_t newSize) 586{ 587 (void) gc; 588#if defined(XFree86LOADER) && defined(IN_MODULE) 589 return xf86realloc(oldAddr, newSize); 590#else 591 return realloc(oldAddr, newSize); 592#endif 593} 594 595static void 596default_free(__GLcontext *gc, void *addr) 597{ 598 (void) gc; 599 _mesa_free(addr); 600} 601 602static char * CAPI 603default_getenv( __GLcontext *gc, const char *var ) 604{ 605 (void) gc; 606 return _mesa_getenv(var); 607} 608 609static void 610default_warning(__GLcontext *gc, char *str) 611{ 612 _mesa_warning(gc, str); 613} 614 615static void 616default_fatal(__GLcontext *gc, char *str) 617{ 618 _mesa_problem(gc, str); 619 abort(); 620} 621 622static int CAPI 623default_atoi(__GLcontext *gc, const char *str) 624{ 625 (void) gc; 626 return atoi(str); 627} 628 629static int CAPI 630default_sprintf(__GLcontext *gc, char *str, const char *fmt, ...) 631{ 632 int r; 633 va_list args; 634 va_start( args, fmt ); 635 r = vsprintf( str, fmt, args ); 636 va_end( args ); 637 return r; 638} 639 640static void * CAPI 641default_fopen(__GLcontext *gc, const char *path, const char *mode) 642{ 643 return fopen(path, mode); 644} 645 646static int CAPI 647default_fclose(__GLcontext *gc, void *stream) 648{ 649 return fclose((FILE *) stream); 650} 651 652static int CAPI 653default_fprintf(__GLcontext *gc, void *stream, const char *fmt, ...) 654{ 655 int r; 656 va_list args; 657 va_start( args, fmt ); 658 r = vfprintf( (FILE *) stream, fmt, args ); 659 va_end( args ); 660 return r; 661} 662 663/* XXX this really is driver-specific and can't be here */ 664static __GLdrawablePrivate * 665default_GetDrawablePrivate(__GLcontext *gc) 666{ 667 return NULL; 668} 669 670 671 672 673/* 674 * Initialize a __GLimports object to point to the functions in 675 * this file. This is to be called from device drivers. 676 * Input: imports - the object to init 677 * driverCtx - pointer to device driver-specific data 678 */ 679void 680_mesa_init_default_imports(__GLimports *imports, void *driverCtx) 681{ 682 imports->malloc = default_malloc; 683 imports->calloc = default_calloc; 684 imports->realloc = default_realloc; 685 imports->free = default_free; 686 imports->warning = default_warning; 687 imports->fatal = default_fatal; 688 imports->getenv = default_getenv; /* not used for now */ 689 imports->atoi = default_atoi; 690 imports->sprintf = default_sprintf; 691 imports->fopen = default_fopen; 692 imports->fclose = default_fclose; 693 imports->fprintf = default_fprintf; 694 imports->getDrawablePrivate = default_GetDrawablePrivate; 695 imports->other = driverCtx; 696} 697