Skip to content

Commit

Permalink
Update free space after operations that affect it
Browse files Browse the repository at this point in the history
  • Loading branch information
mtheall committed Jun 15, 2016
1 parent f017d84 commit 501073c
Showing 1 changed file with 50 additions and 33 deletions.
83 changes: 50 additions & 33 deletions source/ftp.c
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,10 @@ static ftp_command_t ftp_commands[] =
/*! number of ftp commands */
static const size_t num_ftp_commands = sizeof(ftp_commands)/sizeof(ftp_commands[0]);

#ifdef _3DS
static void update_free_space(void);
#endif

/*! compare ftp command descriptors
*
* @param[in] p1 left side of comparison (ftp_command_t*)
Expand Down Expand Up @@ -583,6 +587,7 @@ ftp_session_write_file(ftp_session_t *session)
/* adjust file position */
session->filepos += rc;

update_free_space();
return rc;
}

Expand Down Expand Up @@ -1400,54 +1405,62 @@ ftp_session_poll(ftp_session_t *session)
return ftp_session_destroy(session);
}

static int
update_status(void)
{
#ifdef _3DS
/* Update free space in status bar */
static void
update_free_space(void)
{
#define KiB (1024.0)
#define MiB (1024.0*KiB)
#define GiB (1024.0*MiB)
char buffer[16];
struct statvfs st;
double bytes_free;
int rc;
int rc, len;

rc = statvfs("sdmc:/", &st);
if(rc != 0)
{
console_print(RED "statvfs: %d %s\n" RESET, errno, strerror(errno));
return -1;
}

bytes_free = (double)st.f_bsize * st.f_bfree;
if (bytes_free < 1000.0)
snprintf(buffer, sizeof(buffer), "%.0lf bytes", bytes_free);
else if(bytes_free < 10.0*KiB)
snprintf(buffer, sizeof(buffer), "%.2lfKiB", floor((bytes_free*100.0)/KiB)/100.0);
else if(bytes_free < 100.0*KiB)
snprintf(buffer, sizeof(buffer), "%.1lfKiB", floor((bytes_free*10.0)/KiB)/10.0);
else if(bytes_free < 1000.0*KiB)
snprintf(buffer, sizeof(buffer), "%.0lfKiB", floor(bytes_free/KiB));
else if(bytes_free < 10.0*MiB)
snprintf(buffer, sizeof(buffer), "%.2lfMiB", floor((bytes_free*100.0)/MiB)/100.0);
else if(bytes_free < 100.0*MiB)
snprintf(buffer, sizeof(buffer), "%.1lfMiB", floor((bytes_free*10.0)/MiB)/10.0);
else if(bytes_free < 1000.0*MiB)
snprintf(buffer, sizeof(buffer), "%.0lfMiB", floor(bytes_free/MiB));
else if(bytes_free < 10.0*GiB)
snprintf(buffer, sizeof(buffer), "%.2lfGiB", floor((bytes_free*100.0)/GiB)/100.0);
else if(bytes_free < 100.0*GiB)
snprintf(buffer, sizeof(buffer), "%.1lfGiB", floor((bytes_free*10.0)/GiB)/10.0);
else
snprintf(buffer, sizeof(buffer), "%.0lfGiB", floor(bytes_free/GiB));
{
bytes_free = (double)st.f_bsize * st.f_bfree;

if (bytes_free < 1000.0)
len = snprintf(buffer, sizeof(buffer), "%.0lfB", bytes_free);
else if(bytes_free < 10.0*KiB)
len = snprintf(buffer, sizeof(buffer), "%.2lfKiB", floor((bytes_free*100.0)/KiB)/100.0);
else if(bytes_free < 100.0*KiB)
len = snprintf(buffer, sizeof(buffer), "%.1lfKiB", floor((bytes_free*10.0)/KiB)/10.0);
else if(bytes_free < 1000.0*KiB)
len = snprintf(buffer, sizeof(buffer), "%.0lfKiB", floor(bytes_free/KiB));
else if(bytes_free < 10.0*MiB)
len = snprintf(buffer, sizeof(buffer), "%.2lfMiB", floor((bytes_free*100.0)/MiB)/100.0);
else if(bytes_free < 100.0*MiB)
len = snprintf(buffer, sizeof(buffer), "%.1lfMiB", floor((bytes_free*10.0)/MiB)/10.0);
else if(bytes_free < 1000.0*MiB)
len = snprintf(buffer, sizeof(buffer), "%.0lfMiB", floor(bytes_free/MiB));
else if(bytes_free < 10.0*GiB)
len = snprintf(buffer, sizeof(buffer), "%.2lfGiB", floor((bytes_free*100.0)/GiB)/100.0);
else if(bytes_free < 100.0*GiB)
len = snprintf(buffer, sizeof(buffer), "%.1lfGiB", floor((bytes_free*10.0)/GiB)/10.0);
else
len = snprintf(buffer, sizeof(buffer), "%.0lfGiB", floor(bytes_free/GiB));

console_set_status("\x1b[0;%dH" GREEN "%s", 50-len, buffer);
}
}
#endif

/*! Update status bar */
static int
update_status(void)
{
#ifdef _3DS
console_set_status("\n" GREEN STATUS_STRING " "
CYAN "%s:%u "
YELLOW "SD: " CYAN "%s"
RESET,
CYAN "%s:%u" RESET,
inet_ntoa(serv_addr.sin_addr),
ntohs(serv_addr.sin_port),
buffer);
ntohs(serv_addr.sin_port));
update_free_space();
#else
char hostname[128];
socklen_t addrlen = sizeof(serv_addr);
Expand Down Expand Up @@ -2622,6 +2635,7 @@ FTP_DECLARE(DELE)
return ftp_send_response(session, 550, "failed to delete file\r\n");
}

update_free_space();
return ftp_send_response(session, 250, "OK\r\n");
}

Expand Down Expand Up @@ -2772,6 +2786,7 @@ FTP_DECLARE(MKD)
return ftp_send_response(session, 550, "failed to create directory\r\n");
}

update_free_space();
return ftp_send_response(session, 250, "OK\r\n");
}

Expand Down Expand Up @@ -3247,6 +3262,7 @@ FTP_DECLARE(RMD)
return ftp_send_response(session, 550, "failed to delete directory\r\n");
}

update_free_space();
return ftp_send_response(session, 250, "OK\r\n");
}

Expand Down Expand Up @@ -3329,6 +3345,7 @@ FTP_DECLARE(RNTO)
return ftp_send_response(session, 550, "failed to rename file/directory\r\n");
}

update_free_space();
return ftp_send_response(session, 250, "OK\r\n");
}

Expand Down

0 comments on commit 501073c

Please sign in to comment.