fprintf(stderr
, "rmdir: arg count\n");
if((np
= rindex(name
, '/')) == NULL
)
fprintf(stderr
, "rmdir: %s non-existent\n", name
);
if (stat("", &cst
) < 0) {
fprintf(stderr
, "rmdir: cannot stat \"\"");
if((st
.st_mode
& S_IFMT
) != S_IFDIR
) {
fprintf(stderr
, "rmdir: %s not a directory\n", name
);
if(st
.st_ino
==cst
.st_ino
&&st
.st_dev
==cst
.st_dev
) {
fprintf(stderr
, "rmdir: cannot remove current directory\n");
if((fd
= open(name
,0)) < 0) {
fprintf(stderr
, "rmdir: %s unreadable\n", name
);
while(read(fd
, (char *)&dir
, sizeof dir
) == sizeof dir
) {
if(dir
.d_ino
== 0) continue;
if(!strcmp(dir
.d_name
, ".") || !strcmp(dir
.d_name
, ".."))
fprintf(stderr
, "rmdir: %s not empty\n", name
);
if(!strcmp(np
, ".") || !strcmp(np
, "..")) {
fprintf(stderr
, "rmdir: cannot remove . or ..\n");
if((access(name
, 0)) < 0) { /* name/. non-existent */
if((access(name
, 0)) < 0) /* name/.. non-existent */
name
[strlen(name
)-3] = '\0';
fprintf(stderr
, "rmdir: %s: no permission\n", name
);
unlink(name
); /* unlink name/.. */
name
[strlen(name
)-1] = '\0';
unlink(name
); /* unlink name/. */
name
[strlen(name
)-2] = '\0';
fprintf(stderr
, "rmdir: %s not removed\n", name
);