Ok, it looks like there are a few problems here. Let's take a look at
them.
On Sat, 27 Feb 1999, Andrew Ritchie wrote:
> However, I have run into another difficulty. I want to load an account
> structure from a binary file into memory, and into a linked list of all
> accounts. However, when it does not read any data if you like. It does put
> it in the linked list, but the information in the structure is blank. I'm
> positive my writing to the file in binary mode was all ok... here's the code:
>
> void load_account(char *filename)
> {
> FILE *account;
> struct account_data temp, *new;
> int size;
>
> new = calloc(1, sizeof(struct account_data));
Here you're setting aside space for the new account I assume.
Unfortunately this is the last time you use new.
> sprintf(buf, "../lib/accounts/");
> sprintf(buf + strlen(buf), filename);
>
> if( (account = fopen(buf, "rb")) == NULL) {
> log("Cannot open account file: '%s'", buf);
> return;
> }
>
> fseek(account, 0L, SEEK_END);
Here you're moving to the end of the file.
> size = ftell(account);
Grabbing the byte count.
> if(size) {
> if(size != sizeof(struct account_data)) {
> log("File: '%s' corrupt.", buf);
> return;
> }
> fread(&temp, sizeof(struct account_data), 1, account);
Now here you're calling fread on a file that is already at its end. When
you called fseek and ftell earlier, you never rewound the file. So
nothing is left to be stored in &temp.
> temp.next = account_index;
> account_index = &temp;
Now here is another problem. Even if you had rewound the file, you're
trying to add a temporary structure to the account_index linked list (at
least I'm assuming it's a LL). This is a "bad" thing. You probably want
to utilize that *new you have up at the top.
> }
> else {
> log("Empty account file: '%s'", buf);
> return;
> }
>
> return;
> }
Hope this helps.
Sean
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST