251251#include <stdio.h>
252252#include <stdarg.h>
253253#include <stdlib.h>
254+ #include <stddef.h>
255+ #include <stdint.h>
254256#include <string.h>
255257#include <sys/stat.h>
256258#include <sys/types.h>
257- #include <stdint.h>
258259
259260#if defined( __FREEBSD__ ) || defined( __OPENBSD__ )
260261 #include <machine/limits.h>
@@ -754,21 +755,20 @@ int main( int argc, char **argv ) {
754755
755756 if ( ! err && create ) {
756757 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 ;
761760
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 ;
768767 }
768+ diff += 1 ;
769769 }
770770
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 );
772772
773773 if ( tmp ) free ( tmp );
774774
@@ -952,8 +952,10 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
952952 if ( ! in_root ) {
953953 if ( chdir ( in_root_directory ) == -1 ) chdir_err ( in_root_directory );
954954 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 ;
957959
958960 iso_name = in_name ? in_name : iso_dir ;
959961 }
@@ -964,7 +966,8 @@ int create_xiso( char *in_root_directory, char *in_output_directory, dir_node_av
964966 if ( ! err ) {
965967 if ( ! * iso_dir ) iso_dir = PATH_CHAR_STR ;
966968 if ( ! in_output_directory ) in_output_directory = cwd ;
967- if ( in_output_directory [ i = (int ) strlen ( in_output_directory ) - 1 ] == PATH_CHAR ) in_output_directory [ i -- ] = 0 ;
969+ i = (int )strlen (in_output_directory ) - 1 ;
970+ if ( in_output_directory [i ] == PATH_CHAR ) in_output_directory [i ] = 0 ;
968971 if ( ! iso_name || ! * iso_name ) iso_name = "root" ;
969972 else if ( iso_name [ 1 ] == ':' ) { iso_name [ 1 ] = iso_name [ 0 ]; ++ iso_name ; }
970973#if defined( _WIN32 )
@@ -1112,7 +1115,8 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11121115 repair = true;
11131116 }
11141117
1115- for ( name = & in_xiso [ len ]; name >= in_xiso && * name != PATH_CHAR ; -- name ) ; ++ name ;
1118+ if ((name = strrchr (in_xiso , PATH_CHAR ))) name ++ ;
1119+ else name = in_xiso ;
11161120
11171121 len = (int ) strlen ( name );
11181122
0 commit comments