* adfReadGenBlock * */
| 115 | * |
| 116 | */ |
| 117 | RETCODE adfReadGenBlock(struct Volume *vol, SECTNUM nSect, struct GenBlock *block) |
| 118 | { |
| 119 | uint8_t buf[LOGICAL_BLOCK_SIZE]; |
| 120 | int len; |
| 121 | char name[MAXNAMELEN+1]; |
| 122 | |
| 123 | if (adfReadBlock(vol, nSect, buf)!=RC_OK) |
| 124 | return RC_ERROR; |
| 125 | |
| 126 | block->type =(int) swapLong(buf); |
| 127 | block->secType =(int) swapLong(buf+vol->blockSize-4); |
| 128 | block->sect = nSect; |
| 129 | block->name = NULL; |
| 130 | |
| 131 | if (block->type==T_HEADER) { |
| 132 | switch(block->secType) { |
| 133 | case ST_FILE: |
| 134 | case ST_DIR: |
| 135 | case ST_LFILE: |
| 136 | case ST_LDIR: |
| 137 | len = min(MAXNAMELEN, buf[vol->blockSize-80]); |
| 138 | strncpy(name, (char*)buf+vol->blockSize-79, len); |
| 139 | name[len] = '\0'; |
| 140 | block->name = strdup(name); |
| 141 | block->parent = swapLong(buf+vol->blockSize-12); |
| 142 | break; |
| 143 | case ST_ROOT: |
| 144 | break; |
| 145 | default: |
| 146 | ; |
| 147 | } |
| 148 | } |
| 149 | return RC_OK; |
| 150 | } |
| 151 | |
| 152 | |
| 153 | /* |
no test coverage detected