X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=osl.c;h=bc6956e9958a01aa3457806e5ac7efac7bf6cad8;hp=5c80641930af2125cdaf7b7ad17e880abbc16c93;hb=93ea9f34dcb35755568e6c94f9b9445fd4d1984a;hpb=f3a22620ec1091b6a56152eacd9fcf5560b7bf1d diff --git a/osl.c b/osl.c index 5c806419..bc6956e9 100644 --- a/osl.c +++ b/osl.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007 Andre Noll + * Copyright (C) 2007-2008 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -168,18 +168,17 @@ out: * are passed to \a func. Directories for which the calling process has no * permissions to change to are silently ignored. * - * \return On success, 1 is returned. Otherwise, this function returns a - * negative value which indicates the kind of the error. + * \return Standard. */ int for_each_file_in_dir(const char *dirname, - int (*func)(const char *, const void *), const void *private_data) + int (*func)(const char *, void *), void *private_data) { DIR *dir; struct dirent *entry; int cwd_fd, ret2, ret = para_opendir(dirname, &dir, &cwd_fd); if (ret < 0) - return ret == -E_CHDIR_PERM? 1 : ret; + return ret == -ERRNO_TO_PARA_ERROR(EACCES)? 1 : ret; /* scan cwd recursively */ while ((entry = readdir(dir))) { mode_t m; @@ -305,7 +304,7 @@ static int disk_storage_name_of_row(const struct osl_table *t, static void column_name_hash(const char *col_name, HASH_TYPE *hash) { - return hash_function(col_name, strlen(col_name), hash); + hash_function(col_name, strlen(col_name), hash); } static int init_column_descriptions(struct osl_table *t) @@ -2013,8 +2012,17 @@ int osl_get_nth_row(const struct osl_table *t, unsigned col_num, { struct osl_column *col; struct rb_node *node; - int ret = check_rbtree_col(t, col_num, &col); + unsigned num_rows; + int ret; + if (n == 0) + return -E_RB_KEY_NOT_FOUND; + ret = osl_get_num_rows(t, &num_rows); + if (ret < 0) + return ret; + if (n > num_rows) + return -E_RB_KEY_NOT_FOUND; + ret = check_rbtree_col(t, col_num, &col); if (ret < 0) return ret; node = rb_nth(col->rbtree.rb_node, n);