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?

-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


/**
 * 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;
      return TRUE;
   }
   else {
      return FALSE;
   }
}
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to