patches/vlc-21-1114-filesystem.c-NAME_MAX.diff
author jurikm
Sun, 12 Feb 2012 14:04:10 +0000
changeset 8245 383896da4129
parent 3378 1133106f35d7
permissions -rw-r--r--
SFEsauerbraten.spec: add IPS package name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3378
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     1
Source: http://mailman.videolan.org/pipermail/vlc-devel/2010-June/075315.html
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     2
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     3
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     4
[vlc-devel] [PATCH 1/2] Use pathconf() as NAME_MAX might be undefined
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     5
Francois Cartegnie fcvlcdev at free.fr
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     6
Thu Jun 10 23:25:31 CEST 2010
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     7
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     8
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
     9
SunOS <limits.h> deprecates and comments the NAME_MAX declartion.
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    10
The defined _POSIX_NAME_MAX does not reflect the real value (14).
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    11
Posix says that the reentrant readdir can either take NAME_MAX or
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    12
pathconf.
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    13
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    14
--- vlc-1.1.4.1/src/text/filesystem.c.orig	2010-09-24 11:32:04.000000000 +0200
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    15
+++ vlc-1.1.4.1/src/text/filesystem.c	2010-11-06 22:46:23.808298542 +0100
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    16
@@ -38,11 +38,15 @@
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    17
 
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    18
 #include <stdio.h>
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    19
 #include <limits.h> /* NAME_MAX */
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    20
+#if !defined(NAME_MAX) && defined(_POSIX_NAME_MAX)
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    21
+# define NAME_MAX _POSIX_NAME_MAX
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    22
+#endif
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    23
 #include <errno.h>
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    24
 #include <sys/types.h>
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    25
 #ifdef HAVE_DIRENT_H
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    26
 #  include <dirent.h>
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    27
 #endif
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    28
+#include <stddef.h>
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    29
 #ifdef HAVE_SYS_STAT_H
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    30
 # include <sys/stat.h>
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    31
 #endif
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    32
@@ -322,13 +326,30 @@
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    33
 
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    34
     return FromWide (ent->d_name);
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    35
 #else
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    36
-    struct dirent *ent;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    37
-    struct
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    38
-    {
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    39
-        struct dirent ent;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    40
-        char buf[NAME_MAX + 1];
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    41
-    } buf;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    42
-    int val = readdir_r (dir, &buf.ent, &ent);
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    43
+    struct dirent *ent, *buf;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    44
+    int fd;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    45
+    int name_max;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    46
+  #ifdef __SunOS
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    47
+    fd = dir->dd_fd; /* no dirfd on solaris */
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    48
+  #else
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    49
+    fd = dirfd( dir );
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    50
+  #endif
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    51
+    if ( fd == -1 ) return NULL;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    52
+
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    53
+    name_max = fpathconf( fd, _PC_NAME_MAX );
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    54
+    if ( name_max == -1 )
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    55
+  #ifdef NAME_MAX
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    56
+      name_max = NAME_MAX;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    57
+  #else
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    58
+      name_max = 260; /* libvlc.h FILENAME_MAX */
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    59
+  #endif
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    60
+
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    61
+    buf = (struct dirent *) malloc( (size_t) offsetof(struct dirent, d_name)
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    62
+                  + ++name_max * sizeof(char) );
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    63
+    if ( buf == NULL ) return NULL;
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    64
+    int val = readdir_r (dir, buf, &ent);
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    65
+    if ( !ent || val) free(buf);
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    66
+
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    67
     if (val)
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    68
     {
1133106f35d7 experimental/SFEvlc-1.1.4.1.spec: release to experimental, needs SFEqt47-gpp in new path layout and more work to find QT
tom68
parents:
diff changeset
    69
         errno = val;