lose the generated ps files
[debian/dds2tar] / dds_extract.c
index 45e7dafd12a57b784f3eacbac4aa4443fe990908..1c1face7f8c8656ff5fc74c63b60930332c77a50 100644 (file)
@@ -410,21 +410,37 @@ dds_cmp(char const *const *const pattern_list)
                         */
                        dds_unquote(cur_line);
 
-                       /*
-                        * Set scanoffset
-                        */
-                       so = (0 == strncmp(cur_line, "block", 5))? 2 : 0 ;
-                       
-                       recno = atoi(cur_line + 4 + so );
-                       /*
-                        * tar-1.13 writes now the block number:
-                        */
-                       if ( so == 0 ){
-                               int x ;
-                               int n ;
+                       if (0 == strncmp(cur_line, "block ", 6))
+                       {
+                               int x;
+                               int n;
                                char c;
+
+                               so = 6;
+                               if (2 == sscanf(cur_line + so, "%d%c%n",
+                                               &x, &c, &n)) {
+                                       so += n + 1;
+                                       recno = x;
+#ifdef DDS_TRACE
+                                       fprintf(stderr,"Blocks found:%d\n",x);
+#endif
+                               }
+                               else
+                               {
+                                       recno = 0;
+                               }
+                       }
+                       else
+                       {
+                               int x;
+                               int n;
+                               char c;
+
+                               recno = atoi(cur_line + 4);
+
+                               so = 16;
                                if ( 2 == sscanf(
-                                       cur_line+16,"block %d%c%n",&x,&c,&n
+                                       cur_line+so,"block %d%c%n",&x,&c,&n
                                        ) && c == ':' ) {
                                        so += n + 1 ;
                                        recno = x ;
@@ -433,6 +449,7 @@ dds_cmp(char const *const *const pattern_list)
 #endif
                                }
                        }
+
                        /*
                         * Now we are fixing a bug of gnu tar ...
                         * The first number should be zero, othewise we
@@ -459,47 +476,40 @@ dds_cmp(char const *const *const pattern_list)
 #ifdef DDS_TRACE
                        fprintf(stderr,"file-loc(%d:%d,%d)\n",tar_bs,blkno,recno);
 #endif
-                       if (name == NULL) {     /* calculate only once */
-                               if ( strlen(cur_line) >= (66) ) {
-                                       name = cur_line + (65);
-                                       while ( ( name[ 0] != '\0' )
-                                        && ((     ( name[-1] != ' '  )
-                                               || ( name[-6] != ' '  )
-                                               || ( name[-9] != ':'  )
-                                        )&&(      ( name[-1] != ' '  )
-                                               || ( name[-4] != ':'  )
-                                               || ( name[-7] != ' '  )
-                                               || ( name[-10] != '-'  )
-                                               || ( name[-13] != '-'  )
-                                        ))
-                                       ) name++ ;
-                                       if ( name[0] == '\0' ) {
-                                               name = cur_line + (16+so);
-                                       }
-                               } else {
-                                       if ( strlen(cur_line) <= (16+so) ) {
-                                               strcat(cur_line,
-                                               "                    ");
-                                       }
-                                       name = cur_line + (16+so);
+
+                       /* skip file permissions */
+                       name = strchr(cur_line + so, ' ');
+                       if (name) {
+                         /* skip owner/group */
+                         name = strchr(name + 1, ' ');
+                         if (name) {
+                           /* skip size */
+                           while (*++name == ' ');
+                           name = strchr(name, ' ');
+                           if (name) {
+                             /* skip date */
+                             name = strchr(name + 1, ' ');
+                             if (name) {
+                               /* skip time */
+                               name = strchr(name + 1, ' ');
+
+                               if (name) {
+                                 ++name;
                                }
+                             }
+                           }
+                         }
+                       }
+
+                       if (!name || (name[-4] != ':'))
+                       {
+                         name = cur_line + so;
+                       }
+
 #ifdef DDS_TRACE
-                               fprintf(stderr,"%d\n",__LINE__);
-                               fprintf(stderr,"filename=%s\n",name);
+                       fprintf(stderr,"%d\n",__LINE__);
+                       fprintf(stderr,"filename=%s\n",name);
 #endif
-                       }
-                       while ( ( name[ 0] != '\0' )
-                        &&     ( name != ( cur_line + (16+so) ) )
-                        && ((     ( name[-1] != ' '  )
-                               || ( name[-6] != ' '  )
-                               || ( name[-9] != ':'  )
-                        )&&(      ( name[-1] != ' '  )
-                               || ( name[-4] != ':'  )
-                               || ( name[-7] != ' '  )
-                               || ( name[-10] != '-'  )
-                               || ( name[-13] != '-'  )
-                        ))
-                       ) name++ ;
                }
 #ifdef DDS_TRACE
                fprintf(stderr,"%d\n",__LINE__);