On Wed, Jun 26, 2013 at 09:49:08AM -0600, Brian Paul wrote: > On 06/26/2013 01:11 AM, Jonathan Gray wrote: > >program_invocation_short_name is glibc specific. Provide an > >alternative using getprogname(), which can be found on *BSD and OS X. > > > >Signed-off-by: Jonathan Gray <j...@jsg.id.au> > >--- > > src/gallium/drivers/r300/r300_chipset.c | 10 +++++++++- > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > >diff --git src/gallium/drivers/r300/r300_chipset.c > >src/gallium/drivers/r300/r300_chipset.c > >index 11061ed..7f51ccb 100644 > >--- src/gallium/drivers/r300/r300_chipset.c > >+++ src/gallium/drivers/r300/r300_chipset.c > >@@ -30,6 +30,14 @@ > > #include <stdio.h> > > #include <errno.h> > > > >+#undef GET_PROGRAM_NAME > >+#ifdef __GLIBC__ > >+# define GET_PROGRAM_NAME() program_invocation_short_name > >+#else /* *BSD and OS X */ > >+# include <stdlib.h> > >+# define GET_PROGRAM_NAME() getprogname() > >+#endif > >+ > > /* r300_chipset: A file all to itself for deducing the various properties > > of > > * Radeons. */ > > > >@@ -49,7 +57,7 @@ static void r300_apply_hyperz_blacklist(struct > >r300_capabilities* caps) > > int i; > > > > for (i = 0; i < Elements(list); i++) { > >- if (strcmp(list[i], program_invocation_short_name) == 0) { > >+ if (strcmp(list[i], GET_PROGRAM_NAME()) == 0) { > > caps->zmask_ram = 0; > > caps->hiz_ram = 0; > > break; > > > > I think a new gallium utility function for this would be helpful. > In fact I've already implemented something like this for our windows > driver. > > Does the attached code look OK you to guys?
looks good to me, a few nitpicks inline > > -Brian > > > #include "pipe/p_config.h" > #include "os/os_process.h" > #include "util/u_memory.h" > > #if defined(PIPE_SUBSYSTEM_WINDOWS_USER) > # include <windows.h> > #endif it isn't clear if stdlib.h is included here? > > > /** > * Return the name of the current process. > * \param procname returns the process name, always 0-terminated > * \param size size of the procname buffer > * \return TRUE or FALSE for success, failure > */ > boolean > os_get_process_name(char *procname, size_t size) > { > const char *name; > #if defined(PIPE_SUBSYSTEM_WINDOWS_USER) > char szProcessPath[MAX_PATH]; > char *lpProcessName; > char *lpProcessExt; > > GetModuleFileNameA(NULL, szProcessPath, Elements(szProcessPath)); > > lpProcessName = strrchr(szProcessPath, '\\'); > lpProcessName = lpProcessName ? lpProcessName + 1 : szProcessPath; > > lpProcessExt = strrchr(lpProcessName, '.'); > if (lpProcessExt) { > *lpProcessExt = '\0'; > } > > name = lpProcessName; > > #elif defined(__GLIBC__) > name = program_invocation_short_name; > #else /* *BSD and OS X */ > name = getprogname(); > #endif > > assert(procname); > assert(size > 0); > > if (name) { > strncpy(procname, name, size); > procname[size - 1] = 0; and this should be '\0' not 0, though the end result is the same > return TRUE; > } > else { > return FALSE; > } > } _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev