Skip to content

Commit 3b43826

Browse files
committed
Rewrite path separation to use strrchr and avoid empty for loops
1 parent 248b664 commit 3b43826

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

extract-xiso.c

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,11 @@
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
}
@@ -1109,7 +1111,8 @@ int decode_xiso( char *in_xiso, char *in_path, modes in_mode, char **out_iso_pat
11091111
repair = true;
11101112
}
11111113

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;
11131116

11141117
len = (int) strlen( name );
11151118

0 commit comments

Comments
 (0)