Home | History | Annotate | Line # | Download | only in dist
      1 /*
      2  * media.c -
      3  *
      4  * Written by Eryk Vershen
      5  */
      6 
      7 /*
      8  * Copyright 1997,1998 by Apple Computer, Inc.
      9  *              All Rights Reserved
     10  *
     11  * Permission to use, copy, modify, and distribute this software and
     12  * its documentation for any purpose and without fee is hereby granted,
     13  * provided that the above copyright notice appears in all copies and
     14  * that both the copyright notice and this permission notice appear in
     15  * supporting documentation.
     16  *
     17  * APPLE COMPUTER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
     18  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     19  * FOR A PARTICULAR PURPOSE.
     20  *
     21  * IN NO EVENT SHALL APPLE COMPUTER BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
     22  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
     23  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
     24  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
     25  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     26  */
     27 
     28 
     29 // for printf()
     30 #include <stdio.h>
     31 // for malloc() & free()
     32 #include <stdlib.h>
     33 
     34 #include "media.h"
     35 
     36 
     37 /*
     38  * Defines
     39  */
     40 
     41 
     42 /*
     43  * Types
     44  */
     45 
     46 
     47 /*
     48  * Global Constants
     49  */
     50 
     51 
     52 /*
     53  * Global Variables
     54  */
     55 static long media_kind = 0;
     56 
     57 /*
     58  * Forward declarations
     59  */
     60 
     61 
     62 /*
     63  * Routines
     64  */
     65 long
     66 allocate_media_kind(void)
     67 {
     68     media_kind++;
     69     return media_kind;
     70 }
     71 
     72 
     73 MEDIA
     74 new_media(long size)
     75 {
     76     return (MEDIA) malloc(size);
     77 }
     78 
     79 
     80 void
     81 delete_media(MEDIA m)
     82 {
     83     if (m == 0) {
     84 	return;
     85     }
     86     free(m);
     87 }
     88 
     89 
     90 uint32_t
     91 media_granularity(MEDIA m)
     92 {
     93     if (m == 0) {
     94 	return 0;
     95     } else {
     96 	return m->grain;
     97     }
     98 }
     99 
    100 
    101 long long
    102 media_total_size(MEDIA m)
    103 {
    104     if (m == 0) {
    105 	return 0;
    106     } else {
    107 	return m->size_in_bytes;
    108     }
    109 }
    110 
    111 
    112 long
    113 read_media(MEDIA m, long long offset, uint32_t count, void *address)
    114 {
    115     long result;
    116 
    117     if (m != 0 && m->do_read != 0) {
    118 	//printf("media: read type %d, offset %Ld, count %d\n\t", m->kind, offset, count);
    119 	result = (*m->do_read)(m, offset, count, address);
    120 	//printf(" - returns %d\n", result);
    121 	return result;
    122     } else {
    123 	return 0;
    124     }
    125 }
    126 
    127 
    128 long
    129 write_media(MEDIA m, long long offset, uint32_t count, void *address)
    130 {
    131     long result;
    132 
    133     if (m != 0 && m->do_write != 0) {
    134 	//printf("media: write type %d, offset %Ld, count %d\n\t", m->kind, offset, count);
    135 	result = (*m->do_write)(m, offset, count, address);
    136 	//printf(" - returns %d\n", result);
    137 	return result;
    138     } else {
    139 	return 0;
    140     }
    141 }
    142 
    143 
    144 void
    145 close_media(MEDIA m)
    146 {
    147     if (m == 0) {
    148 	return;
    149     }
    150     if (m->kind != 0) {
    151 	if (m->do_close != 0) {
    152 	    (*m->do_close)(m);
    153 	}
    154 	m->kind = 0;
    155 	delete_media(m);
    156     }
    157 }
    158 
    159 
    160 void
    161 os_reload_media(MEDIA m)
    162 {
    163     if (m != 0 && m->do_os_reload != 0) {
    164 	(*m->do_os_reload)(m);
    165     }
    166 }
    167 
    168 
    169 #if !defined(__linux__) && !defined(__unix__)
    170 #pragma mark -
    171 #endif
    172 
    173 
    174 
    175 MEDIA_ITERATOR
    176 new_media_iterator(long size)
    177 {
    178     return (MEDIA_ITERATOR) malloc(size);
    179 }
    180 
    181 
    182 void
    183 private_delete_media_iterator(MEDIA_ITERATOR m)
    184 {
    185     if (m == 0) {
    186 	return;
    187     }
    188     free(m);
    189 }
    190 
    191 
    192 void
    193 reset_media_iterator(MEDIA_ITERATOR m)
    194 {
    195     if (m != 0 && m->do_reset != 0) {
    196 	(*m->do_reset)(m);
    197     }
    198 }
    199 
    200 
    201 char *
    202 step_media_iterator(MEDIA_ITERATOR m)
    203 {
    204     char *result;
    205 
    206     if (m != 0 && m->do_step != 0) {
    207 	result = (*m->do_step)(m);
    208     } else {
    209 	result = 0;
    210     }
    211     return result;
    212 }
    213 
    214 
    215 void
    216 delete_media_iterator(MEDIA_ITERATOR m)
    217 {
    218     if (m == 0) {
    219 	return;
    220     }
    221     if (m->kind != 0) {
    222 	if (m->do_delete != 0) {
    223 	    (*m->do_delete)(m);
    224 	}
    225 	m->kind = 0;
    226 	private_delete_media_iterator(m);
    227     }
    228 }
    229