|
251 | 251 | #include <stdio.h> |
252 | 252 | #include <stdarg.h> |
253 | 253 | #include <stdlib.h> |
| 254 | +#include <stddef.h> |
| 255 | +#include <stdint.h> |
254 | 256 | #include <string.h> |
255 | 257 | #include <sys/stat.h> |
256 | 258 | #include <sys/types.h> |
257 | | -#include <stdint.h> |
258 | 259 |
|
259 | 260 | #if defined( __FREEBSD__ ) || defined( __OPENBSD__ ) |
260 | 261 | #include <machine/limits.h> |
@@ -754,21 +755,20 @@ int main( int argc, char **argv ) { |
754 | 755 |
|
755 | 756 | if ( ! err && create ) { |
756 | 757 | for ( p = create; ! err && p != nil; ) { |
757 | | - char *tmp = nil; |
758 | | - |
759 | | - if ( p->name ) { |
760 | | - for ( i = (int) strlen( p->name ); i >= 0 && p->name[ i ] != PATH_CHAR; --i ) ; ++i; |
| 758 | + char* tmp = nil; |
| 759 | + ptrdiff_t diff = 0; |
761 | 760 |
|
762 | | - if ( i ) { |
763 | | - if ( ( tmp = (char *) malloc( i + 1 ) ) == nil ) mem_err(); |
764 | | - if ( ! err ) { |
765 | | - strncpy( tmp, p->name, i ); |
766 | | - tmp[ i ] = 0; |
767 | | - } |
| 761 | + if ( p->name && (tmp = strrchr(p->name, PATH_CHAR)) ) { |
| 762 | + diff = tmp - p->name; |
| 763 | + if ( ( tmp = (char *) malloc( diff + 1 ) ) == nil ) mem_err(); |
| 764 | + if ( ! err ) { |
| 765 | + strncpy( tmp, p->name, diff ); |
| 766 | + tmp[ diff ] = 0; |
768 | 767 | } |
| 768 | + diff += 1; |
769 | 769 | } |
770 | 770 |
|
771 | | - if ( ! err ) err = create_xiso( p->path, tmp, nil, -1, nil, p->name ? p->name + i : nil, nil ); |
| 771 | + if ( ! err ) err = create_xiso( p->path, tmp, nil, -1, nil, p->name ? p->name + diff : nil, nil ); |
772 | 772 |
|
773 | 773 | if ( tmp ) free( tmp ); |
774 | 774 |
|
@@ -952,8 +952,10 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av |
952 | 952 | if ( ! in_root ) { |
953 | 953 | if ( chdir( in_root_directory ) == -1 ) chdir_err( in_root_directory ); |
954 | 954 | if ( ! err ) { |
955 | | - if ( in_root_directory[ i = (int) strlen( in_root_directory ) - 1 ] == '/' || in_root_directory[ i ] == '\\' ) in_root_directory[ i-- ] = 0; |
956 | | - for ( iso_dir = &in_root_directory[ i ]; iso_dir >= in_root_directory && *iso_dir != PATH_CHAR; --iso_dir ) ; ++iso_dir; |
| 955 | + i = (int)strlen(in_root_directory) - 1; |
| 956 | + if ( in_root_directory[i] == '/' || in_root_directory[i] == '\\' ) in_root_directory[i--] = 0; |
| 957 | + if (iso_dir = strrchr(in_root_directory, PATH_CHAR)) iso_dir++; |
| 958 | + else iso_dir = in_root_directory; |
957 | 959 |
|
958 | 960 | iso_name = in_name ? in_name : iso_dir; |
959 | 961 | } |
@@ -1109,7 +1111,8 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat |
1109 | 1111 | repair = true; |
1110 | 1112 | } |
1111 | 1113 |
|
1112 | | - for ( name = &in_xiso[ len ]; name >= in_xiso && *name != PATH_CHAR; --name ) ; ++name; |
| 1114 | + if (name = strrchr(in_xiso, PATH_CHAR)) name++; |
| 1115 | + else name = in_xiso; |
1113 | 1116 |
|
1114 | 1117 | len = (int) strlen( name ); |
1115 | 1118 |
|
|
0 commit comments