Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  chansrv_xfs.h

  Sprache: C
 

/**
 * xrdp: A Remote Desktop Protocol server.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * This file is the interface to the FUSE file system used by
 * chansrv
 */


#ifndef _CHANSRV_XFS
#define _CHANSRV_XFS

/* Maximum length of filename supported (in bytes).
 * This is a sensible limit to a filename length. It is not used by
 * this module to allocate long-lived storage, so it can be increased
 * if necessary */

#define XFS_MAXFILENAMELEN 1023

/* Skip the rest of this include if there's no FUSE */
#ifdef XRDP_FUSE

#include <stddef.h>
#include <fuse_lowlevel.h>
#include <time.h>

#include "arch.h"

/*
 * Incomplete types for the public interface
 */

struct xfs_fs;
struct xfs_dir_handle;

/**
 * Describe an inode in the XFS filesystem
 */

typedef struct xfs_inode
{
    fuse_ino_t      inum;              /* File serial number.               */
    mode_t          mode;              /* File mode.                        */
    uid_t           uid;               /* User ID of the file's owner.      */
    gid_t           gid;               /* Group ID of the file's group.     */
    off_t           size;              /* Size of file, in bytes.           */
    time_t          atime;             /* Time of last access.              */
    time_t          mtime;             /* Time of last modification.        */
    time_t          ctime;             /* Time of last status change.       */
    char            *name;             /* Short name (dynamically allocated) */
    tui32           generation;        /* Changes if inode is reused        */
    char            is_redirected;     /* file is on redirected device      */
    tui32           device_id;         /* device ID of redirected device    */
    int             lindex;            /* used in clipboard operations      */
} XFS_INODE;

/*
 * Create a new filesystem instance
 *
 * @param   umask Umask to apply to initial data structures
 * @param   uid Owner UID for initial root directory
 * @param   gid Owner GID for initial root directory
 * @return  Pointer to instance, or NULL if no memory
 */

struct xfs_fs *
xfs_create_xfs_fs(mode_t umask, uid_t uid, gid_t gid);

/*
 * Delete a filesystem instance
 *
 * @param xfs Filesystem instance
 */

void
xfs_delete_xfs_fs(struct xfs_fs *xfs);

/*
 * Add an entry to the filesystem
 *
 * The returned element has default values inherited from the parent
 *
 * The specified mode is sanitised in that:-
 * - Bits other than the lowest nine permissions bits, the directory
 *   bit (S_IFDIR) and the regular bit (S_IFREG) are cleared.
 * - S_IFREG is cleared if S_IFDIR is set
 * - S_IFREG is set if neither S_IFDIR or S_IFREG is set
 *
 * NULL is returned for one of the following conditions:-
 * - the parent does not exist
 * - the parent is not a directory
 * - the name length exceeds XFS_MAXFILENAMELEN
 * - the entry already exists
 * - memory is exhausted.
 *
 * @param xfs  filesystem instance
 * @param parent_inode parent inode
 * @param name   Name of entry
 * @param mode   Initial mode for file.
 * @return inode, or NULL
 */

XFS_INODE *
xfs_add_entry(struct xfs_fs *xfs, fuse_ino_t parent_inum,
              const char *name, mode_t mode);

/*
 * Delete the contents of a directory
 *
 * If normal files are opened when they are deleted, the inode is not
 * released until the open count goes to zero.
 *
 * @param xfs  filesystem instance
 * @param inode Reference to entry to delete
 *
 */

void
xfs_remove_directory_contents(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Delete an entry from the filesystem
 *
 * If normal files are opened when they are deleted, the inode is not
 * released until the open count goes to zero.
 *
 * For directories, the contents are removed first.
 *
 * @param xfs  filesystem instance
 * @param inode Reference to entry to delete
 *
 */

void
xfs_remove_entry(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Get an XFS_INODE for an inum
 *
 * @param xfs  filesystem instance
 * @param inum Inumber
 * @return Pointer to XFS_INODE
 */

XFS_INODE *
xfs_get(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Get the full path for an inum
 *
 * The path is dynamically allocated, and must be freed after use
 *
 * @param xfs  filesystem instance
 * @param inum Inumber to get path for
 * @return Full path (free after use)
 */

char *
xfs_get_full_path(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Lookup a file in a directory
 *
 * @param xfs  filesystem instance
 * @param inum Inumber of the directory
 * @param name Name of the file to lookup
 * @return Pointer to XFS_INODE if found
 */

XFS_INODE *
xfs_lookup_in_dir(struct xfs_fs *xfs, fuse_ino_t inum, const char *name);

/*
 * Inquires as to whether a directory is empty.
 *
 * The caller must check that the inum is actually a directory, or
 * the result is undefined.
 *
 * @param xfs  filesystem instance
 * @param inum Inumber of the directory
 * @return True if the directory is empty
 */

int
xfs_is_dir_empty(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Inquires as to whether an entry is under a directory.
 *
 * This can be used to check for invalid renames, where we try to
 * rename a directory into one of its sub-directories.
 *
 * Returned value means one of the following:-
 * 0   Entry is not related to the directory
 * 1   Entry is an immediate member of the directory
 * 2.. Entry is a few levels below the directory
 *
 * @param xfs  filesystem instance
 * @param dir  Inumber of the directory
 * @param entry Inumber of the entry
 * @return Nesting count of entry in the directory, or 0 for
 *         no nesting
 */

unsigned int
xfs_is_under(struct xfs_fs *xfs, fuse_ino_t dir, fuse_ino_t entry);

/*
 * Opens a directory for reading
 *
 * @param xfs  filesystem instance
 * @param dir  Inumber of the directory
 * @return handle to be passed to xfs_readdir() and xfs_closedir()
 */

struct xfs_dir_handle *
xfs_opendir(struct xfs_fs *xfs, fuse_ino_t dir);

/*
 * Gets the next entry from a directory
 *
 * This function is safe to call while the filesystem is being modified.
 * Whether files added or removed from the directory in question are
 * returned or not is unspecified by this interface.
 *
 * @param xfs  filesystem instance
 * @param handle Handle from xfs_opendir
 * @param off    Offset (by reference). Pass in zero to get the first
 *               entry. After the call, the offset is updated so that
 *               the next call gets the next entry.
 *
 * @return pointer to details of file entry, or NULL if no more
 *         entries are available.
 */

XFS_INODE *
xfs_readdir(struct xfs_fs *xfs, struct xfs_dir_handle *handle, off_t *off);


/*
 * Closes a directory opened for reading
 *
 * @param xfs  filesystem instance
 * @param handle Earlier result of readdir() call
 */

void
xfs_closedir(struct xfs_fs *xfs, struct xfs_dir_handle *handle);

/*
 * Increment the file open count
 *
 * The file open count is used to be sure when an entry can be deleted from
 * the data structures. It allows us to remove an entry while still retaining
 * enough state to manage the file
 *
 * This call is only necessary for regular files - not directories
 *
 * @param xfs  filesystem instance
 * @param inum File to increment the count of
 */

void
xfs_increment_file_open_count(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Decrement the file open count
 *
 * This call will ensure that deleted inodes are cleared up at the appropriate
 * time.
 *
 * This call is only necessary for regular files - not directories
 *
 * @param xfs  filesystem instance
 * @param inum File to decrement the count of
 */

void
xfs_decrement_file_open_count(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Return the file open count for a regular file
 */

unsigned int
xfs_get_file_open_count(struct xfs_fs *xfs, fuse_ino_t inum);

/*
 * Deletes all redirected entries with the matching device id
 *
 * Files are deleted even if they are open
 *
 * @param device_id Device ID
 */

void
xfs_delete_redirected_entries_with_device_id(struct xfs_fs *xfs,
        tui32 device_id);

/*
 * Check an entry move will be successful
 *
 * A move will fail if:-
 * - Any of the parameters are invalid
 * - if the entry is a directory, and the new parent is below the
 *   entry in the existing hierarchy.
 *
 * @param xfs  filesystem instance
 * @param inum Inumber of entry
 * @param new_parent New parent
 * @param name New name
 *
 * @result != 0 if all looks OK
 */

int
xfs_check_move_entry(struct xfs_fs *xfs, fuse_ino_t inum,
                     fuse_ino_t new_parent_inum, const char *name);


/*
 * Move (rename) an entry
 *
 * @param xfs  filesystem instance
 * @param inum Inumber of entry
 * @param new_parent New parent
 * @param name New name
 *
 * @result 0, or a suitable errno value.
 */

int
xfs_move_entry(struct xfs_fs *xfs, fuse_ino_t inum,
               fuse_ino_t new_parent_inum, const char *name);

#endif /*  XRDP_FUSE   */
#endif /* _CHANSRV_XFS */

Messung V0.5 in Prozent
C=97 H=93 G=94

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-07-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik