summaryrefslogtreecommitdiff
path: root/libdiskfs
diff options
context:
space:
mode:
authorJustus Winter <justus@gnupg.org>2016-04-18 19:33:03 +0200
committerJustus Winter <justus@gnupg.org>2016-05-19 22:27:37 +0200
commit3416078aa58b095566e559b7dbd9c9da4d1fc5d5 (patch)
tree808d757d6f53f79b62cdb9005682ad6e077b2316 /libdiskfs
parente15ef8f1a3ab358692d25a688496bde463daf948 (diff)
libdiskfs: cosmetic changes
* libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Rename identifiers to be more idiomatic and closer to libnetfs and the interface specification. Massage the code so that it aligns closer with the dir_lookup server function in libnetfs. It should not change the behavior.
Diffstat (limited to 'libdiskfs')
-rw-r--r--libdiskfs/dir-lookup.c113
1 files changed, 57 insertions, 56 deletions
diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c
index c50970d2..72ada0f4 100644
--- a/libdiskfs/dir-lookup.c
+++ b/libdiskfs/dir-lookup.c
@@ -27,19 +27,19 @@
#include "fs_S.h"
/* Implement dir_lookup as described in <hurd/fs.defs>. */
-kern_return_t
+error_t
diskfs_S_dir_lookup (struct protid *dircred,
- char *path,
+ char *filename,
int flags,
mode_t mode,
- enum retry_type *retry,
- char *retryname,
- file_t *returned_port,
- mach_msg_type_name_t *returned_port_poly)
+ retry_type *do_retry,
+ char *retry_name,
+ mach_port_t *retry_port,
+ mach_msg_type_name_t *retry_port_type)
{
struct node *dnp;
struct node *np;
- int nsymlink = 0;
+ int nsymlinks = 0;
char *nextname;
char *relpath;
int nextnamelen;
@@ -66,23 +66,23 @@ diskfs_S_dir_lookup (struct protid *dircred,
excl = (flags & O_EXCL);
/* Skip leading slashes */
- while (path[0] == '/')
- path++;
+ while (*filename == '/')
+ filename++;
- /* Preserve the path relative to diruser->po->path. */
- relpath = strdup (path);
+ /* Preserve the path relative to dircred->po->path. */
+ relpath = strdup (filename);
if (! relpath)
return ENOMEM;
- /* Keep a pointer to the start of the path for length
+ /* Keep a pointer to the start of the filename for length
calculations. */
- char *path_start = path;
+ char *filename_start = filename;
- *returned_port_poly = MACH_MSG_TYPE_MAKE_SEND;
- *retry = FS_RETRY_NORMAL;
- retryname[0] = '\0';
+ *retry_port_type = MACH_MSG_TYPE_MAKE_SEND;
+ *do_retry = FS_RETRY_NORMAL;
+ *retry_name = '\0';
- if (path[0] == '\0')
+ if (*filename == '\0')
{
/* Set things up in the state expected by the code from gotit: on. */
dnp = 0;
@@ -93,9 +93,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
}
dnp = dircred->po->np;
-
pthread_mutex_lock (&dnp->lock);
- np = 0;
diskfs_nref (dnp); /* acquire a reference for later diskfs_nput */
@@ -104,7 +102,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
assert (!lastcomp);
/* Find the name of the next pathname component */
- nextname = index (path, '/');
+ nextname = index (filename, '/');
if (nextname)
{
@@ -132,10 +130,10 @@ diskfs_S_dir_lookup (struct protid *dircred,
{
if (!ds)
ds = alloca (diskfs_dirstat_size);
- err = diskfs_lookup (dnp, path, CREATE, &np, ds, dircred);
+ err = diskfs_lookup (dnp, filename, CREATE, &np, ds, dircred);
}
else
- err = diskfs_lookup (dnp, path, LOOKUP, &np, 0, dircred);
+ err = diskfs_lookup (dnp, filename, LOOKUP, &np, 0, dircred);
if (lastcomp && create && excl && (!err || err == EAGAIN))
err = EEXIST;
@@ -158,13 +156,13 @@ diskfs_S_dir_lookup (struct protid *dircred,
else
{
/* Punt the client up to the shadow root parent. */
- *retry = FS_RETRY_REAUTH;
- *returned_port = dircred->po->shadow_root_parent;
- *returned_port_poly = MACH_MSG_TYPE_COPY_SEND;
+ *do_retry = FS_RETRY_REAUTH;
+ *retry_port = dircred->po->shadow_root_parent;
+ *retry_port_type = MACH_MSG_TYPE_COPY_SEND;
if (lastcomp && mustbedir) /* Trailing slash. */
- strcpy (retryname, "/");
+ strcpy (retry_name, "/");
else if (!lastcomp)
- strcpy (retryname, nextname);
+ strcpy (retry_name, nextname);
err = 0;
goto out;
}
@@ -174,13 +172,13 @@ diskfs_S_dir_lookup (struct protid *dircred,
shadow root, we can get here if its in a directory that was
renamed out from under it... */
{
- *retry = FS_RETRY_REAUTH;
- *returned_port = dircred->po->root_parent;
- *returned_port_poly = MACH_MSG_TYPE_COPY_SEND;
+ *do_retry = FS_RETRY_REAUTH;
+ *retry_port = dircred->po->root_parent;
+ *retry_port_type = MACH_MSG_TYPE_COPY_SEND;
if (lastcomp && mustbedir) /* Trailing slash. */
- strcpy (retryname, "/");
+ strcpy (retry_name, "/");
else if (!lastcomp)
- strcpy (retryname, nextname);
+ strcpy (retry_name, nextname);
err = 0;
goto out;
}
@@ -200,7 +198,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
{
mode &= ~(S_IFMT | S_ISPARE | S_ISVTX | S_ITRANS);
mode |= S_IFREG;
- err = diskfs_create_node (dnp, path, mode, &np, dircred, ds);
+ err = diskfs_create_node (dnp, filename, mode, &np, dircred, ds);
if (diskfs_synchronous)
{
diskfs_file_update (dnp, 1);
@@ -228,7 +226,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
struct iouser *user;
/* A callback function for short-circuited translators.
- Symlink & ifsock are handled elsewhere. */
+ S_ISLNK and S_IFSOCK are handled elsewhere. */
error_t short_circuited_callback1 (void *cookie1, void *cookie2,
uid_t *uid, gid_t *gid,
char **argz, size_t *argz_len)
@@ -239,17 +237,19 @@ diskfs_S_dir_lookup (struct protid *dircred,
{
case S_IFCHR:
case S_IFBLK:
- asprintf (argz, "%s%c%d%c%d",
- (S_ISCHR (node->dn_stat.st_mode)
- ? _HURD_CHRDEV : _HURD_BLKDEV),
- 0, major (node->dn_stat.st_rdev),
- 0, minor (node->dn_stat.st_rdev));
+ if (asprintf (argz, "%s%c%d%c%d",
+ (S_ISCHR (node->dn_stat.st_mode)
+ ? _HURD_CHRDEV : _HURD_BLKDEV),
+ 0, major (node->dn_stat.st_rdev),
+ 0, minor (node->dn_stat.st_rdev)) < 0)
+ return ENOMEM;
*argz_len = strlen (*argz) + 1;
*argz_len += strlen (*argz + *argz_len) + 1;
*argz_len += strlen (*argz + *argz_len) + 1;
break;
case S_IFIFO:
- asprintf (argz, "%s", _HURD_FIFO);
+ if (asprintf (argz, "%s", _HURD_FIFO) < 0)
+ return ENOMEM;
*argz_len = strlen (*argz) + 1;
break;
default:
@@ -299,7 +299,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
? _diskfs_translator_callback1
: short_circuited_callback1),
_diskfs_translator_callback2,
- retry, retryname, returned_port);
+ do_retry, retry_name, retry_port);
/* fetch_root copies DIRPORT for success, so we always should
deallocate our send right. */
@@ -307,14 +307,14 @@ diskfs_S_dir_lookup (struct protid *dircred,
if (err != ENOENT)
{
- *returned_port_poly = MACH_MSG_TYPE_MOVE_SEND;
+ *retry_port_type = MACH_MSG_TYPE_MOVE_SEND;
if (!err)
{
- char *end = strchr (retryname, '\0');
+ char *end = strchr (retry_name, '\0');
if (mustbedir)
*end++ = '/'; /* Trailing slash. */
else if (!lastcomp) {
- if (end != retryname)
+ if (end != retry_name)
*end++ = '/';
strcpy (end, nextname);
}
@@ -333,7 +333,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
char *end = nextname;
while (*end != 0)
end--;
- translator_path[end - path_start] = '\0';
+ translator_path[end - filename_start] = '\0';
}
if (dircred->po->path == NULL || !strcmp (dircred->po->path,"."))
@@ -363,7 +363,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
err = 0;
if (np != dnp)
{
- if (!strcmp (path, ".."))
+ if (!strcmp (filename, ".."))
pthread_mutex_lock (&dnp->lock);
else
{
@@ -384,7 +384,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
{
/* Handle symlink interpretation */
- if (nsymlink++ > diskfs_maxsymlinks)
+ if (nsymlinks++ > diskfs_maxsymlinks)
{
err = ELOOP;
goto out;
@@ -412,7 +412,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
goto out;
if (np->dn_stat.st_size == 0) /* symlink to "" */
- path = nextname;
+ filename = nextname;
else
{
if (nextname)
@@ -432,13 +432,13 @@ diskfs_S_dir_lookup (struct protid *dircred,
if (pathbuf[0] == '/')
{
/* Punt to the caller. */
- *retry = FS_RETRY_MAGICAL;
- *returned_port = MACH_PORT_NULL;
- strcpy (retryname, pathbuf);
+ *do_retry = FS_RETRY_MAGICAL;
+ *retry_port = MACH_PORT_NULL;
+ strcpy (retry_name, pathbuf);
goto out;
}
- path = pathbuf;
+ filename = pathbuf;
mustbedir = 0;
}
@@ -448,7 +448,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
diskfs_nput (np);
np = 0;
- if (path == 0) /* symlink to "" was the last component */
+ if (filename == 0) /* symlink to "" was the last component */
{
np = dnp;
dnp = 0;
@@ -458,7 +458,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
else
{
/* Handle normal nodes */
- path = nextname;
+ filename = nextname;
if (np == dnp)
diskfs_nrele (dnp);
else
@@ -471,7 +471,8 @@ diskfs_S_dir_lookup (struct protid *dircred,
else
dnp = 0;
}
- } while (path && *path);
+ }
+ while (filename && *filename);
/* At this point, np is the node to return. If newnode is set, then
we just created this node. */
@@ -553,7 +554,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
if (! newpi->po->path)
err = errno;
- *returned_port = ports_get_right (newpi);
+ *retry_port = ports_get_right (newpi);
ports_port_deref (newpi);
newpi = 0;
}