@@ -46,8 +46,10 @@ int error_handler() {
46
46
}
47
47
48
48
int set_euid_egid (int euid , int egid ) {
49
- if (setegid (egid ) == -1 ) return error_handler () - 1 ;
50
- if (seteuid (euid ) == -1 ) return error_handler () - 1 ;
49
+ if (setegid (egid ) == -1 || seteuid (euid ) == -1 ) {
50
+ error_handler ();
51
+ return -1 ;
52
+ }
51
53
return 0 ;
52
54
}
53
55
@@ -117,7 +119,7 @@ int builtin_echo(char *line) {
117
119
if (argc == 2 ) {
118
120
FILE * file = fopen (filename , "a+" );
119
121
if (file == NULL ) return error_handler ();
120
- fprintf (file , "%s" , arg );
122
+ fprintf (file , "%s\n " , arg );
121
123
fclose (file );
122
124
} else
123
125
printf ("%s\n" , arg );
@@ -136,19 +138,22 @@ int builtin_find(char *line) {
136
138
int argc ;
137
139
if ((argc = sscanf (line , "%*s %s %s" , arg , extra )) > 1 ) return -1 ;
138
140
139
- DIR * dir = opendir (argc == 1 ? arg : "." );
141
+ const char * path = argc == 1 ? arg : "." ;
142
+ DIR * dir = opendir (path );
140
143
if (dir == NULL ) return error_handler ();
141
144
struct dirent * dp ;
142
145
struct stat info ;
146
+ char filename [N ];
143
147
while ((dp = readdir (dir )) != NULL ) {
144
- printf ("%-20s" , dp -> d_name );
145
- if (stat (dp -> d_name , & info ) == -1 ) {
148
+ sprintf (filename , "%s/%s" , path , dp -> d_name );
149
+ printf ("%-20s\t%-20s" , dp -> d_name ,
150
+ get_file_type (DTTOIF (dp -> d_type ) & S_IFMT ));
151
+ if (stat (filename , & info ) == -1 ) {
146
152
printf ("\n" );
147
153
error_handler ();
148
154
continue ;
149
155
}
150
- printf ("\t%-20s\t%-5ld\n" , get_file_type (info .st_mode & S_IFMT ),
151
- info .st_size );
156
+ printf ("\t%-5ld\n" , info .st_size );
152
157
}
153
158
closedir (dir );
154
159
return 0 ;
@@ -243,10 +248,9 @@ int builtin_touch(char *line) {
243
248
char arg [N ], extra [N ];
244
249
if (sscanf (line , "%*s %s %s" , arg , extra ) != 1 ) return -1 ;
245
250
246
- int fd = open (arg , O_WRONLY | O_CREAT | O_NOCTTY | O_NONBLOCK , 0666 );
247
- if (fd < 0 ) return error_handler ();
248
- int rc = utimensat (AT_FDCWD , arg , NULL , 0 );
249
- if (rc ) return error_handler ();
251
+ if (open (arg , O_WRONLY | O_CREAT | O_NOCTTY | O_NONBLOCK , 0666 ) == -1 ||
252
+ utimensat (AT_FDCWD , arg , NULL , 0 ) == -1 )
253
+ return error_handler ();
250
254
return 0 ;
251
255
}
252
256
0 commit comments