/***************************************************** a wrapper for unlink() *******************************************************/ int smbw_unlink(const char *fname) { struct smbw_server *srv; fstring server, share; pstring path; if (!fname) { errno = EINVAL; return -1; } smbw_init(); smbw_busy++; /* work out what server they are after */ smbw_parse_path(fname, server, share, path); /* get a connection to the server */ srv = smbw_server(server, share); if (!srv) { /* smbw_server sets errno */ goto failed; } if (strncmp(srv->cli.dev, "LPT", 3) == 0) { int job = smbw_stat_printjob(srv, path, NULL, NULL); if (job == -1) { goto failed; } if (cli_printjob_del(&srv->cli, job) != 0) { goto failed; } } else if (!cli_unlink(&srv->cli, path)) { errno = smbw_errno(&srv->cli); goto failed; } smbw_busy--; return 0; failed: smbw_busy--; return -1; }
/***************************************************** a wrapper for stat() *******************************************************/ int smbw_stat(const char *fname, struct stat *st) { struct smbw_server *srv; fstring server, share; pstring path; time_t m_time=0, a_time=0, c_time=0; size_t size=0; uint16 mode=0; SMB_INO_T ino = 0; ZERO_STRUCTP(st); if (!fname) { errno = EINVAL; return -1; } DEBUG(4,("stat(%s)\n", fname)); smbw_init(); smbw_busy++; /* work out what server they are after */ smbw_parse_path(fname, server, share, path); /* get a connection to the server */ srv = smbw_server(server, share); if (!srv) { /* smbw_server sets errno */ goto failed; } DEBUG(4,("smbw_stat\n")); if (strncmp(srv->cli.dev,"IPC",3) == 0) { mode = aDIR | aRONLY; } else if (strncmp(srv->cli.dev,"LPT",3) == 0) { if (strcmp(path,"\\") == 0) { mode = aDIR | aRONLY; } else { mode = aRONLY; smbw_stat_printjob(srv, path, &size, &m_time); c_time = a_time = m_time; } } else { if (!smbw_getatr(srv, path, &mode, &size, &c_time, &a_time, &m_time, &ino)) { errno = smbw_errno(&srv->cli); goto failed; } } st->st_ino = ino; smbw_setup_stat(st, path, size, mode); st->st_atime = a_time; st->st_ctime = c_time; st->st_mtime = m_time; st->st_dev = srv->dev; smbw_busy--; return 0; failed: smbw_busy--; return -1; }