linux_specific.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:3k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * linux_specific.c: Linux-specific initialization
  3.  *****************************************************************************
  4.  * Copyright © 2008 Rémi Denis-Courmont
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  19.  *****************************************************************************/
  20. #ifdef HAVE_CONFIG_H
  21. # include "config.h"
  22. #endif
  23. #include <stdio.h>
  24. #include <string.h>
  25. #include <vlc_common.h>
  26. #include "../libvlc.h"
  27. #if 0
  28. #include <assert.h>
  29. #include <pthread.h>
  30. static void set_libvlc_path (void)
  31. {
  32.     static char libvlc_path[PATH_MAX];
  33.     assert (strlen (LIBDIR) < sizeof (libvlc_path));
  34.     strcpy (libvlc_path, LIBDIR); /* fail safe */
  35.     psz_vlcpath = libvlc_path;
  36.     /* Find the path to libvlc (i.e. ourselves) */
  37.     FILE *maps = fopen ("/proc/self/maps", "rt");
  38.     if (maps == NULL)
  39.         return;
  40.     for (;;)
  41.     {
  42.         char buf[5000], *dir, *end;
  43.         if (fgets (buf, sizeof (buf), maps) == NULL)
  44.             break;
  45.         dir = strchr (buf, '/');
  46.         if (dir == NULL)
  47.             continue;
  48.         end = strrchr (dir, '/');
  49.         if (end == NULL)
  50.             continue;
  51.         if (strncmp (end + 1, "libvlc.so.", 10))
  52.             continue;
  53.         *end = '';
  54.         printf ("libvlc at %sn", dir);
  55.         if (strlen (dir) < sizeof (libvlc_path))
  56.             strcpy (libvlc_path, dir);
  57.         break;
  58.     }
  59.     fclose (maps);
  60. }
  61. #endif
  62. #ifdef __GLIBC__
  63. # include <gnu/libc-version.h>
  64. # include <stdlib.h>
  65. #endif
  66. void system_Init (libvlc_int_t *libvlc, int *argc, const char *argv[])
  67. {
  68. #ifdef __GLIBC__
  69.     const char *glcv = gnu_get_libc_version ();
  70.     /* gettext in glibc 2.5-2.7 is not thread-safe. LibVLC keeps crashing,
  71.      * especially in sterror_r(). Even if we have NLS disabled, the calling
  72.      * process might have called setlocale(). */
  73.     if (strverscmp (glcv, "2.5") >= 0 && strverscmp (glcv, "2.8") < 0)
  74.     {
  75.         fputs ("LibVLC has detected an unusable buggy GNU/libc version.n"
  76.                "Please update to version 2.8 or newer.n", stderr);
  77.         fflush (stderr);
  78. #ifndef DISABLE_BUGGY_GLIBC_CHECK
  79.         abort ();
  80. #endif
  81.     }
  82. #endif
  83. #if 0
  84.     static pthread_once_t once = PTHREAD_ONCE_INIT;
  85.     pthread_once (&once, set_libvlc_path);
  86. #endif
  87.     (void)libvlc; (void)argc; (void)argv;
  88. }
  89. void system_Configure (libvlc_int_t *libvlc, int *argc, const char *argv[])
  90. {
  91.     (void)libvlc; (void)argc; (void)argv;
  92. }
  93. void system_End (libvlc_int_t *libvlc)
  94. {
  95.     (void)libvlc;
  96. }