summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/bdpart-mount.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libblock/src/bdpart-mount.c')
-rw-r--r--cpukit/libblock/src/bdpart-mount.c184
1 files changed, 0 insertions, 184 deletions
diff --git a/cpukit/libblock/src/bdpart-mount.c b/cpukit/libblock/src/bdpart-mount.c
deleted file mode 100644
index cfc08ead30..0000000000
--- a/cpukit/libblock/src/bdpart-mount.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * @file
- *
- * @ingroup rtems_bdpart
- *
- * @brief Block Device Partition Management
- */
-
-/*
- * Copyright (c) 2009, 2010
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * D-82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <rtems.h>
-#include <rtems/bdpart.h>
-#include <rtems/libio.h>
-
-rtems_status_code rtems_bdpart_mount(
- const char *disk_name,
- const rtems_bdpart_partition *pt RTEMS_UNUSED,
- size_t count,
- const char *mount_base
-)
-{
- rtems_status_code esc = RTEMS_SUCCESSFUL;
- const char *disk_file_name = strrchr( disk_name, '/');
- char *logical_disk_name = NULL;
- char *logical_disk_marker = NULL;
- char *mount_point = NULL;
- char *mount_marker = NULL;
- size_t disk_file_name_size = 0;
- size_t disk_name_size = strlen( disk_name);
- size_t mount_base_size = strlen( mount_base);
- size_t i = 0;
-
- /* Create logical disk name base */
- logical_disk_name = malloc( disk_name_size + RTEMS_BDPART_NUMBER_SIZE);
- if (logical_disk_name == NULL) {
- return RTEMS_NO_MEMORY;
- }
- strncpy( logical_disk_name, disk_name, disk_name_size);
-
- /* Get disk file name */
- if (disk_file_name != NULL) {
- disk_file_name += 1;
- disk_file_name_size = strlen( disk_file_name);
- } else {
- disk_file_name = disk_name;
- disk_file_name_size = disk_name_size;
- }
-
- /* Create mount point base */
- mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
- if (mount_point == NULL) {
- esc = RTEMS_NO_MEMORY;
- goto cleanup;
- }
- strncpy( mount_point, mount_base, mount_base_size);
- mount_point [mount_base_size] = '/';
- strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
-
- /* Markers */
- logical_disk_marker = logical_disk_name + disk_name_size;
- mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
-
- /* Mount supported file systems for each partition */
- for (i = 0; i < count; ++i) {
- /* Create logical disk name */
- int rv = snprintf( logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
- if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
- esc = RTEMS_INVALID_NAME;
- goto cleanup;
- }
-
- /* Create mount point */
- strncpy( mount_marker, logical_disk_marker, RTEMS_BDPART_NUMBER_SIZE);
- rv = rtems_mkdir( mount_point, S_IRWXU | S_IRWXG | S_IRWXO);
- if (rv != 0) {
- esc = RTEMS_IO_ERROR;
- goto cleanup;
- }
-
- /* Mount */
- rv = mount(
- logical_disk_name,
- mount_point,
- "msdos",
- 0,
- NULL
- );
- if (rv != 0) {
- rmdir( mount_point);
- }
- }
-
-cleanup:
-
- free( logical_disk_name);
- free( mount_point);
-
- return esc;
-}
-
-rtems_status_code rtems_bdpart_unmount(
- const char *disk_name,
- const rtems_bdpart_partition *pt RTEMS_UNUSED,
- size_t count,
- const char *mount_base
-)
-{
- rtems_status_code esc = RTEMS_SUCCESSFUL;
- const char *disk_file_name = strrchr( disk_name, '/');
- char *mount_point = NULL;
- char *mount_marker = NULL;
- size_t disk_file_name_size = 0;
- size_t disk_name_size = strlen( disk_name);
- size_t mount_base_size = strlen( mount_base);
- size_t i = 0;
-
- /* Get disk file name */
- if (disk_file_name != NULL) {
- disk_file_name += 1;
- disk_file_name_size = strlen( disk_file_name);
- } else {
- disk_file_name = disk_name;
- disk_file_name_size = disk_name_size;
- }
-
- /* Create mount point base */
- mount_point = malloc( mount_base_size + 1 + disk_file_name_size + RTEMS_BDPART_NUMBER_SIZE);
- if (mount_point == NULL) {
- esc = RTEMS_NO_MEMORY;
- goto cleanup;
- }
- strncpy( mount_point, mount_base, mount_base_size);
- mount_point [mount_base_size] = '/';
- strncpy( mount_point + mount_base_size + 1, disk_file_name, disk_file_name_size);
-
- /* Marker */
- mount_marker = mount_point + mount_base_size + 1 + disk_file_name_size;
-
- /* Mount supported file systems for each partition */
- for (i = 0; i < count; ++i) {
- /* Create mount point */
- int rv = snprintf( mount_marker, RTEMS_BDPART_NUMBER_SIZE, "%zu", i + 1);
- if (rv >= RTEMS_BDPART_NUMBER_SIZE) {
- esc = RTEMS_INVALID_NAME;
- goto cleanup;
- }
-
- /* Unmount */
- rv = unmount( mount_point);
- if (rv == 0) {
- /* Remove mount point */
- rv = rmdir( mount_point);
- if (rv != 0) {
- esc = RTEMS_IO_ERROR;
- goto cleanup;
- }
- }
- }
-
-cleanup:
-
- free( mount_point);
-
- return esc;
-}