(builtin_ls): return status; also don't print fatal error messages to

the output stream, instead use syslog


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10857 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2002-02-28 15:49:19 +00:00
parent 4153690552
commit eb8685ce0b

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999 - 2001 Kungliga Tekniska H<>gskolan * Copyright (c) 1999 - 2002 Kungliga Tekniska H<>gskolan
* (Royal Institute of Technology, Stockholm, Sweden). * (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved. * All rights reserved.
* *
@@ -349,8 +349,7 @@ compare_size(struct fileinfo *a, struct fileinfo *b)
return b->st.st_size - a->st.st_size; return b->st.st_size - a->st.st_size;
} }
static void static int list_dir(FILE*, const char*, int);
list_dir(FILE *out, const char *directory, int flags);
static int static int
log10(int num) log10(int num)
@@ -464,7 +463,7 @@ lstat_file (const char *file, struct stat *sb)
#define IS_DOT_DOTDOT(X) ((X)[0] == '.' && ((X)[1] == '\0' || \ #define IS_DOT_DOTDOT(X) ((X)[0] == '.' && ((X)[1] == '\0' || \
((X)[1] == '.' && (X)[2] == '\0'))) ((X)[1] == '.' && (X)[2] == '\0')))
static void static int
list_files(FILE *out, const char **files, int n_files, int flags) list_files(FILE *out, const char **files, int n_files, int flags)
{ {
struct fileinfo *fi; struct fileinfo *fi;
@@ -472,14 +471,18 @@ list_files(FILE *out, const char **files, int n_files, int flags)
int *dirs = NULL; int *dirs = NULL;
size_t total_blocks = 0; size_t total_blocks = 0;
int n_print = 0; int n_print = 0;
int ret = 0;
if(n_files == 0)
return 0;
if(n_files > 1) if(n_files > 1)
flags |= LS_SHOW_DIRNAME; flags |= LS_SHOW_DIRNAME;
fi = calloc(n_files, sizeof(*fi)); fi = calloc(n_files, sizeof(*fi));
if (fi == NULL) { if (fi == NULL) {
sec_fprintf2(out, "ouf of memory\r\n"); syslog(LOG_ERR, "out of memory");
return; return -1;
} }
for(i = 0; i < n_files; i++) { for(i = 0; i < n_files; i++) {
if(lstat_file(files[i], &fi[i].st) < 0) { if(lstat_file(files[i], &fi[i].st) < 0) {
@@ -492,8 +495,8 @@ list_files(FILE *out, const char **files, int n_files, int flags)
if(dirs == NULL) if(dirs == NULL)
dirs = calloc(n_files, sizeof(*dirs)); dirs = calloc(n_files, sizeof(*dirs));
if(dirs == NULL) { if(dirs == NULL) {
sec_fprintf2(out, "%s: %s\r\n", syslog(LOG_ERR, "%s: %m", files[i]);
files[i], strerror(errno)); ret = -1;
goto out; goto out;
} }
dirs[i] = 1; dirs[i] = 1;
@@ -686,6 +689,7 @@ list_files(FILE *out, const char **files, int n_files, int flags)
free(fi); free(fi);
if(dirs != NULL) if(dirs != NULL)
free(dirs); free(dirs);
return ret;
} }
static void static void
@@ -714,7 +718,7 @@ hide_file(const char *filename, int flags)
return 0; return 0;
} }
static void static int
list_dir(FILE *out, const char *directory, int flags) list_dir(FILE *out, const char *directory, int flags)
{ {
DIR *d = opendir(directory); DIR *d = opendir(directory);
@@ -723,8 +727,8 @@ list_dir(FILE *out, const char *directory, int flags)
int n_files = 0; int n_files = 0;
if(d == NULL) { if(d == NULL) {
sec_fprintf2(out, "%s: %s\r\n", directory, strerror(errno)); syslog(LOG_ERR, "%s: %m", directory);
return; return -1;
} }
while((ent = readdir(d)) != NULL) { while((ent = readdir(d)) != NULL) {
void *tmp; void *tmp;
@@ -733,23 +737,23 @@ list_dir(FILE *out, const char *directory, int flags)
continue; continue;
tmp = realloc(files, (n_files + 1) * sizeof(*files)); tmp = realloc(files, (n_files + 1) * sizeof(*files));
if (tmp == NULL) { if (tmp == NULL) {
sec_fprintf2(out, "%s: out of memory\r\n", directory); syslog(LOG_ERR, "%s: out of memory", directory);
free_files (files, n_files); free_files (files, n_files);
closedir (d); closedir (d);
return; return -1;
} }
files = tmp; files = tmp;
asprintf(&files[n_files], "%s/%s", directory, ent->d_name); asprintf(&files[n_files], "%s/%s", directory, ent->d_name);
if (files[n_files] == NULL) { if (files[n_files] == NULL) {
sec_fprintf2(out, "%s: out of memory\r\n", directory); syslog(LOG_ERR, "%s: out of memory", directory);
free_files (files, n_files); free_files (files, n_files);
closedir (d); closedir (d);
return; return -1;
} }
++n_files; ++n_files;
} }
closedir(d); closedir(d);
list_files(out, (const char**)files, n_files, flags | LS_DIR_FLAG); return list_files(out, (const char**)files, n_files, flags | LS_DIR_FLAG);
} }
static int static int
@@ -828,10 +832,11 @@ parse_flags(const char *options)
return flags; return flags;
} }
void int
builtin_ls(FILE *out, const char *file) builtin_ls(FILE *out, const char *file)
{ {
int flags; int flags;
int ret;
if(*file == '-') { if(*file == '-') {
flags = parse_flags(file); flags = parse_flags(file);
@@ -839,6 +844,7 @@ builtin_ls(FILE *out, const char *file)
} else } else
flags = parse_flags(""); flags = parse_flags("");
list_files(out, &file, 1, flags); ret = list_files(out, &file, 1, flags);
sec_fflush(out); sec_fflush(out);
return ret;
} }